package model;

import java.sql.Date;
import java.util.ArrayList;
import model.persistencia.FornecedorDAO;

public class FornecedorModel implements IFornecedor{
    
    private int codigo;     
    private String nome;       
    private String endereco;
    private String email;      
    private String bairro;
    private String cidade;     
    private String cep;
    private String uf;
    private String fone;       
    private String celular;
    private String cpf;        
    private String obs;        
    private String rg;         
    private String orgaorg;    
    private Date dataCadatro;      
    private String cnpj;         
    private String fax;        
    private String contato;    
    private String auditoria; 
    private FornecedorDAO fornecedorDAO;
    private ArrayList observers;
            
//String INSEST;       
    
    private static FornecedorModel instance = null;

    public synchronized static FornecedorModel getInstance(){
        if (instance == null) {
            instance = new FornecedorModel();
        }
        return instance;
    }

    public FornecedorModel() {
        fornecedorDAO = new FornecedorDAO(this);
        observers = new ArrayList();
    }

    public FornecedorModel(int codigo, String nome, String endereco, String email, String bairro, String cidade, String cep, 
            String uf, String fone, String celular, String cpf, String obs, String rg, String orgaorg, Date dataCadatro, 
            String cnpj, String fax, String contato, String auditoria) {
        this.codigo = codigo;
        this.nome = nome;
        this.endereco = endereco;
        this.email = email;
        this.bairro = bairro;
        this.cidade = cidade;
        this.cep = cep;
        this.uf = uf;
        this.fone = fone;
        this.celular = celular;
        this.cpf = cpf;
        this.obs = obs;
        this.rg = rg;
        this.orgaorg = orgaorg;
        this.dataCadatro = dataCadatro;
        this.cnpj = cnpj;
        this.fax = fax;
        this.contato = contato;
        this.auditoria = auditoria;
    }
    
    @Override
    public void setProximoCodigo(){        
        int proximoCodigo = fornecedorDAO.getCodigo(SQL_ULTIMO,0) + 1;
        this.codigo = proximoCodigo;
    }
    
    @Override
    public FornecedorModel getFornecedor(int codigo) {
        return fornecedorDAO.getObject(codigo);
    }
    
    @Override
    public ArrayList getAll() {
        return pesquisar(SQL_GETALL, "0");
    }
   
    //<editor-fold defaultstate="collapsed" desc="GET E SET METODOS">
    @Override
    public int getCodigo() {
        return codigo;
    }
    
    @Override
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    
    @Override
    public String getNome() {
        return nome;
    }
    
    @Override
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    @Override
    public String getEndereco() {
        return endereco;
    }
    
    @Override
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    
    @Override
    public String getEmail() {
        return email;
    }
    
    @Override
    public void setEmail(String email) {
        this.email = email;
    }
    
    @Override
    public String getBairro() {
        return bairro;
    }
    
    @Override
    public void setBairro(String bairro) {
        this.bairro = bairro;
    }
    
    @Override
    public String getCidade() {
        return cidade;
    }
    
    @Override
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }
    
    @Override
    public String getCep() {
        return cep;
    }
    
    @Override
    public void setCep(String cep) {
        this.cep = cep;
    }
    
    @Override
    public String getUf() {
        return uf;
    }
    
    @Override
    public void setUf(String uf) {
        this.uf = uf;
    }
    
    @Override
    public String getFone() {
        return fone;
    }
    
    @Override
    public void setFone(String fone) {
        this.fone = fone;
    }
    
    @Override
    public String getCelular() {
        return celular;
    }
    
    @Override
    public void setCelular(String celular) {
        this.celular = celular;
    }
    
    @Override
    public String getCpf() {
        return cpf;
    }
    
    @Override
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    
    @Override
    public String getObs() {
        return obs;
    }
    
    @Override
    public void setObs(String obs) {
        this.obs = obs;
    }
    
    @Override
    public String getRg() {
        return rg;
    }
    
    @Override
    public void setRg(String rg) {
        this.rg = rg;
    }
    
    @Override
    public String getOrgaorg() {
        return orgaorg;
    }
    
    @Override
    public void setOrgaorg(String orgaorg) {
        this.orgaorg = orgaorg;
    }
    
    @Override
    public Date getDataCadatro() {
        return dataCadatro;
    }
    
    @Override
    public void setDataCadatro(Date dataCadatro) {
        this.dataCadatro = dataCadatro;
    }
    
    @Override
    public String getCnpj() {
        return cnpj;
    }
    
    @Override
    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }
    
    @Override
    public String getFax() {
        return fax;
    }
    
    @Override
    public void setFax(String fax) {
        this.fax = fax;
    }
    
    @Override
    public String getContato() {
        return contato;
    }
    
    @Override
    public void setContato(String contato) {
        this.contato = contato;
    }
    
    @Override
    public String getAuditoria() {
        return auditoria;
    }
    
    @Override
    public void setAuditoria(String auditoria) {
        this.auditoria = auditoria;
    }
    //</editor-fold>    
    
    //<editor-fold defaultstate="collapsed" desc="GRUD">
    @Override
    public void inserir(){
        fornecedorDAO.inserir();
        notificarObservers();
    }
    
    @Override
    public void atualizar(){
        fornecedorDAO.atualizar();
        notificarObservers();
    }
    
    @Override
    public void excluir(){
        fornecedorDAO.excluir();
        notificarObservers();
    }
    
    @Override
    public ArrayList pesquisar(int iOpcao, String iPesquisa) {
        return fornecedorDAO.pesquisar(iOpcao, iPesquisa);
    }
    //</editor-fold>    
    
    //<editor-fold defaultstate="collapsed" desc="OBSERVER">
    @Override
    public void registrarObserver(Observer o) {
        observers.add(o);
    }
    
    @Override
    public void removerObserver(Observer o) {
        int i = observers.indexOf(o);
        if (i >= 0){
            observers.remove(i);
        }
    }
    
    @Override
    public void notificarObservers() {
        for (int i = 0;i < observers.size();i++){
            Observer observer = (Observer) observers.get(i);
            observer.update();
        }
    }
    //</editor-fold> 
    
}
